<?php
//程序功能：吉祥号码等级判定
//编 写 人：黄健
//编制日期：2014年6月
//入口参数：手机号码，13812345678；固话号码，51187654321
//返回类型：数组（号码等级，匹配模式）

function lucky_num($msisdn) {
  if(strlen($msisdn)!=11) return array(0,'号码错误');
  $cB=$msisdn[0]; $cA=$msisdn[1]; $c9=$msisdn[2];
  $c8=$msisdn[3]; $c7=$msisdn[4]; $c6=$msisdn[5]; $c5=$msisdn[6];
  $c4=$msisdn[7]; $c3=$msisdn[8]; $c2=$msisdn[9]; $c1=$msisdn[10];
  $r4=substr($msisdn,7,4);

//五类吉祥号码
//1、号码相同：号码尾数为AAAA(A=6、8、9)、AAABBB(A或B=6、8、9，且A≠B)、AAAABBBB(A≠B)、号码尾数为五同号及以上；
//2、号码相连：号码尾数为六连号及以上。号码中间数为ABCDEFG(7连号)

//五类A档    号码尾数为AAAAAAA、ABCDEFG、AAAABBBB(A≠B)及其它七号以上的连续号码
  if($c7==$c6&&$c6==$c5&&$c5==$c4&&$c4==$c3&&$c3==$c2&&$c2==$c1) //AAAAAAA
  return array(55,'AAAAAAA');

  if($c7==$c6+1&&$c6==$c5+1&&$c5==$c4+1&&$c4==$c3+1&&$c3==$c2+1&&$c2==$c1+1) //ABCDEFG
  return array(55,'ABCDEFG');

  if($c7==$c6-1&&$c6==$c5-1&&$c5==$c4-1&&$c4==$c3-1&&$c3==$c2-1&&$c2==$c1-1) //ABCDEFG
  return array(55,'ABCDEFG');

  if($c8==$c7&&$c7==$c6&&$c6==$c5&&$c4==$c3&&$c3==$c2&&$c2==$c1) //AAAABBBB(A≠B)
  return array(55,'AAAABBBB');

//七号以上的连续号码
  $arr=array('0123456','1234567','2345678','3456789','9876543','8765432','7654321','6543210');
  foreach($arr as $k => $s) {
    if(strpos($msisdn,$s)!=false) return array(55,'中间7连号');
  }

//五类B档	号码尾数为AAAAAA、ABCDEF、AAABBB(A、B=6、8、9)的号码
  if($c6==$c5&&$c5==$c4&&$c4==$c3&&$c3==$c2&&$c2==$c1) //AAAAAA
  return array(54,'AAAAAA');

  if($c6==$c5+1&&$c5==$c4+1&&$c4==$c3+1&&$c3==$c2+1&&$c2==$c1+1) //ABCDEF
  return array(54,'ABCDEF');

  if($c6==$c5-1&&$c5==$c4-1&&$c4==$c3-1&&$c3==$c2-1&&$c2==$c1-1) //ABCDEF
  return array(54,'ABCDEF');

  if(($c6==$c5&&$c5==$c4&&$c3==$c2&&$c2==$c1&&$c6!=$c3)&&(strpos('.689',$c6)||strpos('.689',$c3)) ) //AAABBB(A、B=6、8、9)
  return array(54,'AAABBB(A&B=689)');


//五类C档	号码尾数为AAAAA(A≠4)、ABCDE的号码
  if($c5==$c4&&$c4==$c3&&$c3==$c2&&$c2==$c1&&$c5!='4') //AAAAA(A≠4)
  return array(53,'AAAAA(A≠4)');

  if($c5==$c4+1&&$c4==$c3+1&&$c3==$c2+1&&$c2==$c1+1) //ABCDE倒序
  return array(4,'EDCBA');

  if($c5==$c4-1&&$c4==$c3-1&&$c3==$c2-1&&$c2==$c1-1) //ABCDE
  return array(53,'ABCDE');

//五类D档	号码尾数为AAAA(A=6、8、9)
  if(strpos('.6666.8888.9999',$r4))
  return array(52,'AAAA(A=689)');

//五类E档	号码尾数为AAAAA(A=4)
  if($c5.$r4=='44444') return array(51,'尾数44444');


//四类吉祥号码
//1、号码相同：号码尾数为AAA(A=6、8、9)、AAAA(A≠4、6、8、9)、AAABBB(A≠B≠6、8、9)、ABABABAB(A≠B≠4)、号码中间数为AAAAA(五同号，A≠4),号码中间数为6同号及以上；
//2、号码连续：号码尾数为ABCDE(ABCDE为五连号)、AABBCCDD(ABCD为连号)、ABCDABCD(ABCD为连号)；号码中间数为ABCDEF(6连号)
  if(strpos('.666.888.999',$c3.$c2.$c1)) //AAA(A=6、8、9)
  return array(4,'AAA(A=689)');

  if($c4==$c3&&$c3==$c2&&$c2==$c1&&!strpos('.4689',$c4)) //AAAA(A≠4、6、8、9)
  return array(4,'AAAA(A≠4689)');

  if($c6==$c5&&$c5==$c4&&$c3==$c2&&$c2==$c1&&$c6!=$c3) //AAABBB(A≠B≠6、8、9)689已在五类中，不再判断
  return array(4,'AAABBB(A≠B≠689)');

  if($c8.$c6.$c4.$c2==$c7.$c5.$c3.$c1&&$c8.$c6.$c4.$c2!='4444') //ABABABAB(A≠B≠4)
  return array(4,'ABABABAB(A≠B≠4)');

  if($c5==$c4+1 and $c4==$c3+1 and $c3==$c2+1 and $c2==$c1+1) //ABCDE(ABCDE为五连号)
  return array(4,'ABCDE五连号');

  if($c5==$c4-1 and $c4==$c3-1 and $c3==$c2-1 and $c2==$c1-1) //ABCDE(ABCDE为五连号)
  return array(4,'ABCDE五连号');

  if($c8.$c6.$c4.$c2==$c7.$c5.$c3.$c1) //AABBCCDD(ABCD为连号)
  return array(4,'AABBCCDD');

  if($c8.$c7.$c6.$c5==$r4) //ABCDABCD(ABCD为连号)
  return array(4,'ABCDABCD');

  if($r4=='5678'||$r4=='6789'||$r4=='5432'||$r4=='6543'||$r4=='9876'||$r4=='8765') //ABCD（A=5、6）
  return array(4,'ABCD(A=56)');

//连号规则
//|| ($c7==$c6+1 and $c5==$c4+1 and $c3==$c2+1 and $c8.$c6.$c4.$c2==$c7.$c5.$c3.$c1) //AABBCCDD(ABCD为连号)
//|| ($c7==$c6-1 and $c5==$c4-1 and $c3==$c2-1 and $c8.$c6.$c4.$c2==$c7.$c5.$c3.$c1) //AABBCCDD(ABCD为连号)
//|| ($c8==$c7+1 and $c7==$c6+1 and $c6==$c5+1 and $c8.$c7.$c6.$c5==$r4) //ABCDABCD(ABCD为连号)
//|| ($c8==$c7-1 and $c7==$c6-1 and $c6==$c5-1 and $c8.$c7.$c6.$c5==$r4) //ABCDABCD(ABCD为连号)

//号码中间数为AAAAA(五同号，A≠4),号码中间数为6同号及以上，号码中间数为ABCDEF(6连号)
  $arr=array('00000','11111','22222','33333','444444','55555','66666','77777','88888','99999');
  foreach($arr as $k => $s) {
    if(strpos($msisdn,$s)!=false)
      if($c1=='4') return array(3,'中间五同号尾号4');
      else return array(4,'中间五同号');
  }

  $arr=array('012345','123456','234567','345678','456789','987654','876543','765432','654321','543210');
  foreach($arr as $k => $s) {
    if(strpos($msisdn,$s)!=false) return array(4,'中间六连号');
  }

//三类吉祥号码
//1、号码相同：号码尾数为AAAA(A=4)、AAA(A≠4、6、8、9)、AABB(A或B=6、8、9，且A≠B)、AAABB(A≠B≠4)、ABABAB(A≠B≠4)、号码中间数为AAAA(A≠4)、AAAAA(A=4)；
//2、号码连续：号码尾数为ABCD(ABCD为四连号)、AABBCC(ABC为连号)、ABCABC(ABC为连号)；号码中间数为ABCDE(5连号)

  if($r4=='4444') //尾数为AAAA(A=4)
  return array(3,'AAAA(A=4)');

  if($c3==$c2&&$c2==$c1&&!strpos('.4689',$c3)) //AAA(A≠4、6、8、9)
  return array(3,'AAA(A≠4689)');

  if($c4==$c3&&$c2==$c1&&$c4!=$c2&&(strpos('.689',$c4)||strpos('.689',$c2))) //AABB(A或B=6、8、9，且A≠B)
  return array(3,'AABB(A|B=689&A≠B)');

  if($c5==$c4&&$c4==$c3&&$c2==$c1) //AAABB(A≠B≠4)&&$c5!='4'&&$c2!=4
  if($c5=='4'||$c1=='4')
    if($c6==$c5) return array(3,'AAAABB(A≠B=4)');
    else return array(2,'AAABB(A≠B=4)');
  else return array(3,'AAABB(A≠B≠4)');

  if($c6==$c4&&$c5==$c3&&$c4==$c2&&$c3==$c1&&$c6!=$c5) //ABABAB(A≠B≠4)
  if($c6=='4'||$c5=='4') return array(2,'ABABAB(A≠B&A|B=4)');
  else return array(3,'ABABAB(A≠B≠4)');

  if($c4==$c3+1&&$c3==$c2+1&&$c2==$c1+1) //尾数为ABCD(ABCD为四连号)
  return array(3,'ABCD四连号');

  if($c4==$c3-1&&$c3==$c2-1&&$c2==$c1-1) //尾数为ABCD(ABCD为四连号)
  return array(3,'ABCD四连号');

  if($c6==$c5&&$c4==$c3&&$c2==$c1) //AABBCC
  if($c6!='4'&&$c4!='4'&&$c2!=4) return array(3,'AABBCC');
  else return array(3,'AABBCC含4');

  if($c6==$c3&&$c5==$c2&&$c4==$c1&&($c6!='4'&&$c5!='4'&&$c4!=4)) //ABCABC
  return array(3,'ABCABC');

//|| ($c5==$c4+1&&$c3==$c2+1&&$c6.$c4.$c2==$c5.$c3.$c1) //AABBCC(ABC为连号)
//|| ($c5==$c4-1&&$c3==$c2-1&&$c6.$c4.$c2==$c5.$c3.$c1) //AABBCC(ABC为连号)
//|| ($c3==$c2+1&&$c2==$c1+1&&$c6.$c5.$c4==$c3.$c2.$c1) //ABCABC(ABC为连号)
//|| ($c3==$c2-1&&$c2==$c1-1&&$c6.$c5.$c4==$c3.$c2.$c1) //ABCABC(ABC为连号)

//号码中间数为AAAA(A≠4)、AAAAA(A=4)；号码中间数为ABCDE(5连号)
  $arr=array('0000','1111','2222','3333','44444','5555','6666','7777','8888','9999');
  foreach($arr as $k => $s) {
    if(strpos($msisdn,$s)>5) return array(3,'中间AAAA');
  }

  $arr=array('01234','12345','23456','34567','45678','56789','98765','87654','76543','65432','54321','43210');
  foreach($arr as $k => $s) {
    if(strpos($msisdn,$s)!=false) return array(3,'中间ABCDE');
  }

//二类吉祥号码
//1、号码相同：号码尾数为AAA(A=4)、ABAB(A或B=8，且A≠B)、AABB(A≠B≠4、6、8、9，)、AAAB(A或B=6、8、9，且A≠B≠4)、AB88(A≠B≠4)、ABABAB(A或B=4，且A≠B)、号码中间数为AAAA(A=4)；
//2、号码连续：号码尾数为ABC(ABC为三连号)；号码中间数为ABCD(4连号)
  if($c3.$c2.$c1=='444') //尾数为AAA(A=4)
  return array(2,'尾数444');

  if($c4==$c2&&$c3==$c1&&($c4=='8'||$c3=='8')) //ABAB(A或B=8，且A≠B)
  return array(2,'ABAB(A|B=8&A≠B');

  if($c4==$c3&&$c2==$c1&&!strpos('.4689',$c4)&&!strpos('.4689',$c2)) //AABB(A≠B≠4、6、8、9，)
  return array(2,'AABB(A≠B≠4689)');

  if($c4==$c3&&$c3==$c2&&$c4!=$c1&&(strpos('.689',$c4)&&$c1!='4'||strpos('.689',$c1)&&$c4!='4')) //AAAB(A或B=6、8、9，且A≠B≠4)
  return array(2,'AAAB(A|B=689&A≠B≠4)');

  if($c2=='8'&&$c1=='8'&&$c4!=$c3&&$c4!='4'&&$c3!='4') //AB88(A≠B≠4)
  return array(2,'AB88(A≠B≠4)');

  if($c3=='8'&&$c2=='8'&&$c4==$c1&&$c4!='4') //A88A(A≠B≠4)
  return array(2,'A88A(A≠B≠4)');

  if($c4=='8'&&$c1=='8'&&$c3==$c2&&$c3!='4') //8AA8(A≠B≠4)
  return array(2,'8AA8(A≠B≠4)');

  if($c6.$c4.$c2==$c5.$c3.$c1&&$c6!=$c5&&($c6=='4'||$c5=='4')) //ABABAB(A或B=4，且A≠B)
  return array(2,'ABABAB(A|B=4&A≠B)');

  if($c3==$c2+1&&$c2==$c1+1||$c3==$c2-1&&$c2==$c1-1) //尾数为ABC(ABC为三连号)
  return array(2,'ABC三连号');

  if($c6==$c3&&$c5==$c2&&$c4==$c1) //ABCABC &&($c6=='8'||$c5=='8'||$c4=='8')&&$c1!=4
  return array(2,'ABCABC含4');

//号码中间数为AAAA(A=4)
  if(strpos($msisdn,'4444')) return array(2,'中间4444');

//号码中间数为ABCD(4连号)
  $arr=array('4444','0123','1234','2345','3456','4567','5678','6789','9876','8765','7654','6543','5432','4321','3210');
  foreach($arr as $k => $s) {
    if(strpos($msisdn,$s)!=false) return array(2,'中间四连号');;
  }


//一类吉祥号码
//1、尾数带“8”：号码尾数为ABC8(A≠4或B≠4或C≠4)；
//2、号码相同：ABAB(A≠B≠4、8)、AABB(A或B=4，且A≠B)、AAAB(A≠B≠6、8、9，且B≠4)、ABBA(A≠B≠4)；
  if($c1=='8') //尾数为ABC8(A≠4或B≠4或C≠4)&&($c4!='4'||$c4!='4'||$c4!='4')
  return array(1,'尾数8');

  if($c4==$c2&&$c3==$c1&&$c4!=$c3&&$c4!='4'&&$c4!='8'&&$c3!='4'&&$c3!='8') //ABAB(A≠B≠4、8)
  return array(1,'ABAB(A≠B≠48)');

  if($c4==$c3&&$c2==$c1&&($c4=='4'||$c2=='4')&&$c4!=$c2) //AABB(A或B=4，且A≠B)
  return array(1,'AABB(A|B=4&A≠B)');

  if($c4==$c3&&$c3==$c2&&$c4!=$c1&&!strpos('.689',$c4)&&!strpos('.689',$c1)&&$c1!='4') //AAAB(A≠B≠6、8、9，且B≠4)
  return array(1,'AAAB(A≠B≠689&B≠4)');

  if($c4==$c1&&$c3==$c2&&$c4!=$c3&&$c4!='4'&&$c3!='4') //ABBA(A≠B≠4)
  return array(1,'ABBA(A≠B≠4)');

//下述为市公司增加规则：
//AAAB（A≠B，B≠4）
  if($c4==$c3&&$c3==$c2&&$c4!=$c1&&$c1!='4')
  return array(1,'AAAB(A≠B≠689&B≠4)');

//ABCDE?
  if(($c2==$c3+1&&$c3==$c4+1&&$c4==$c5+1&&$c5==$c6+1)||
  ( $c6==$c5+1&&$c5==$c4+1&&$c4==$c3+1&&$c3==$c2+1)) {
    return array(1,'ABCDE?');
  }
// ABCDEF?
  if(($c2==$c3+1&&$c3==$c4+1&&$c4==$c5+1&&$c5==$c6+1&&$c6==$c7+1 )||
  ( $c7==$c6+1&&$c6==$c5+1&&$c5==$c4+1&&$c4==$c3+1&&$c3==$c2+1)) {
    return array(1,'ABCDEF?');
  }
// ABCDE??
  if(($c3==$c4+1&&$c4==$c5+1&&$c5==$c6+1&&$c6==$c7+1)||
  ($c7==$c6+1&&$c6==$c5+1&&$c5==$c4+1&&$c4==$c3+1)) {
    return array(1,'ABCDE??');
  }

//ABCD?
  if(($c2==$c3+1&&$c3==$c4+1&&$c4==$c5+1)||
  ($c5==$c4+1&&$c4==$c3+1&&$c3==$c2+1)) {
    return array(1,'ABCD?');
  }

//ABCD??
  if(($c3==$c4+1&&$c4==$c5+1&&$c5==$c6+1)||
  ($c6==$c5+1&&$c5==$c4+1&&$c4==$c3+1)) {
    return array(1,'ABCD??');
  }

//ABCD???
  if(($c4==$c5+1&&$c5==$c6+1&&$c6==$c7+1)||
  ($c7==$c6+1&&$c6==$c5+1&&$c5==$c4+1)) {
    return array(1,'ABCD???');
  }

//AAAA?（A≠4）
  if($c5==$c4&&$c4==$c3&&$c3==$c2&&$c5!='4') {
    return array(1,'AAAA?');
  }

//AAAA??（A≠4）
  if($c6==$c5&&$c5==$c4&&$c4==$c3&&$c6!='4') {
    return array(1,'AAAA??');
  }

//AAAA???（A≠4）
  if($c7==$c6&&$c6==$c5&&$c5==$c4&&$c7!='4') {
    return array(1,'AAAA???');
  }

//AAAAA?（A≠4）
  if($c6==$c5&&$c5==$c4&&$c4==$c3&&$c3==$c2&&$c6!='4') {
    return array(1,'AAAAA?');
  }

//AAAAA??（A≠4）
  if($c7==$c6&&$c6==$c5&&$c5==$c4&&$c4==$c3&&$c7!='4') {
    return array(1,'AAAAA??');
  }
//AAAAA???（A≠4）
  if($c8==$c7&&$c7==$c6&&$c6==$c5&&$c5==$c4&&$c8!='4') {
    return array(1,'AAAAA???');
  }
//AAAAAA?（A≠4）
  if($c7==$c6&&$c6==$c5&&$c5==$c4&&$c4==$c3&&$c3==$c2&&$c7!='4') {
    return array(1,'AAAAAA?');
  }
  return array(0,'普号');
}

//等级	模式	判定公式	备注
//59	????AAAAAAA	$c7==$c6&&$c6==$c5&&$c5==$c4&&$c4==$c3&&$c3==$c2&&$c2==$c1	尾数为AAAAAAA
//59	????ABCDEFG	$c7==$c6+1&&$c6==$c5+1&&$c5==$c4+1&&$c4==$c3+1&&$c3==$c2+1&&$c2==$c1+1	尾数为ABCDEFG
//59	????ABCDEFG	$c7==$c6-1&&$c6==$c5-1&&$c5==$c4-1&&$c4==$c3-1&&$c3==$c2-1&&$c2==$c1-1	尾数为ABCDEFG
//59	???AAAABBBB	$c8==$c7&&$c7==$c6&&$c6==$c5&&$c4==$c3&&$c3==$c2&&$c2==$c1	尾数为AAAABBBB(A≠B)
//59	???ABCDEFG?	array('0123456','1234567','2345678','3456789','9876543','8765432','7654321','6543210')	七号以上的连续号码

?>